//-----------------------------------------
// 	PicOS Project
//
// 	HEPIA 2014 - Florent Gluck
//
//	Denis Voirol		Pierre Kiss
//	Ruben Magnin		Alina Stanculescu
//	Sebastien Beureux	Julien Cornut
//-----------------------------------------
//
//	picofslist.c
//
//	display name and size of files saved in system
//
//-----------------------------------------

#include <stdlib.h>
#include <stdio.h>
#include "fs.h"

int main(int argc, char *argv[])
{
    FILE* nom_fic = NULL;
    int caractereActuel = 0;
    int i=0;
    int byte0 = 0;
    int byte1 = 0;
    int byte2 = 0;
    int byte3 = 0;

    // stockage des donnees issues de la ligne de commandes
    if(argc != 2){
        printf("Usage : picosflist nom_fichier\n");
        return 1;
    }
 
    nom_fic = fopen(argv[1], "r");

    if (nom_fic != NULL)
    {
        printf("\nNom_du_fichier\tTaille\n\n"); // En-tete


        // Boucle de lecture du premier caractere des secteurs de File Entry
        for(i=1;i<=FILES_ENTRY_SIZE/SECTOR_SIZE;i++)
        {
            fseek(nom_fic, i*SECTOR_SIZE, SEEK_SET);    // Place curseur au debut du secteur (512 byte par secteur)

            caractereActuel = fgetc(nom_fic);
            if(caractereActuel != 0)
            {
                // Lecture des caracteres suivants, tant qu'ils ne sont pas egal a '0'
                do
                {
                    printf("%c", caractereActuel);
                    caractereActuel = fgetc(nom_fic);   // caractere suivant
                }while(caractereActuel != 0);

                printf("\t");
                
                // Lecture de la taille du fichier
                fseek(nom_fic, i*SECTOR_SIZE+64, SEEK_SET);     // deplace curseur au 65eme byte du secteur
                byte0 = fgetc(nom_fic); // LSB
                byte1 = fgetc(nom_fic);
                byte2 = fgetc(nom_fic);
                byte3 = fgetc(nom_fic); // MSB
                int taille = byte0|(byte1<<8)|(byte2<<16)|(byte2<<24);

                printf("%d \toctets\n", taille);        // On l'affiche
            }

        }


        printf("\n"); // Retour charriot
        fclose(nom_fic);
    }
    else
    {
        printf("Impossible d'ouvrir le fichier %s\n", argv[1]);
    }

	return 0;
}
